import socket
import select



def handle(c):
    data = c.recv(1024)
    if not data:
        connections.remove(c)
        c.close()
        return
    print(f'данные для отправки: {data}')
    c.sendall(data)

# def HTTP_handle(req):
#     ... - логика не требующая IO, а только CPU
#     db = connect()
#     ... - логика не требующая IO, а только CPU
#     row = db.query()
#     ... - логика не требующая IO, а только CPU
#     db.close()
#     return render(row)

# async def HTTP_handle(req):
#     ...
#     db = yield connect()
#     ...
#     row = yield db.query()
#     ...
#     db.close()
#     return render(row)


s = socket.socket()
s.setblocking(False)
s.bind(('127.0.0.1', 5000))
s.listen(5)
connections = [s]
print('Waiting for connections')
try:
    while True:
        r_s, _, _ = select.select(connections, [], [])
        for r in r_s:
            if r == s:
                c, a = s.accept()
                print(f'Connected to client {a}')
                connections.append(c)
            else:
                handle(r)
finally:
    s.close()